package com.ys.day30.p5json解析;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


/**
 * 描述: P2原生Json的了解与使用
 * step
 * 1:导入 原生json包 如:json-20180813.jar
 *
 * @author CodeYang
 * @version 2021/1/15 0:33
 */
public class P2原生Json的了解与使用 {

    /**
     * 原生json的使用特点与诀窍:
     * 1: Java - > Json 使用带to开头的方法
     * 2: Json - > Java 使用带pase开头的方法
     * <p>
     * 场景: 将 java对象转为json 并在控台输出
     *
     * @param args
     */
    public static void main(String[] args) {

        function01();
        function02();


    }

    /**
     * Java 数组对象转为 json
     * 场景：定义一个Worker数组，里面有若干个Worker对象，然后将Worker数组转换为JSON对象支持的格式
     * <p>
     * 步骤：
     * <p>
     * 1 创建一个Worker数组，里面存储了若干个Worker对象
     * <p>
     * 2 将数组转换为List集合
     * <p>
     * 3 创建JSON数组对象，将Java的List集合注入到JSON数组中
     * <p>
     * 4 调用toString()方法，将Java数组转换为JSON对象支持的格式
     */
    private static void function02() {
        Worker[] workers = {

                new Worker(102, "ys2", 18000),
                new Worker(101, "ys1", 10000),
                new Worker(103, "ys3", 70000)
        };
        // 数组转集合
        /**
         *      public JSONArray(Collection<?> collection)  支持集合  不会抛出异常
         *      public JSONArray(Object array)  也支持直接存放数组 会抛出异常
         *      两种都可以,看情况使用
         */
        List<Worker> workerList = Arrays.asList(workers);
        // 把  List<Worker> 转为   ArrayList<Worker> 可以把数据变为 Collection 集合,可以按照指定属性集合返回
        ArrayList<Worker> arrayList = new ArrayList<>(workerList);
        JSONArray jsonArray = new JSONArray(arrayList);
        System.out.println(jsonArray);
    }

    /**
     * 1JAVA 单个对象转 json
     * 场景：我定义一个Worker类里面有id  工人姓名  工人底薪   工人的提成，我想将Java对象的数据转换为JSON支持的文本。
     * <p>
     * 步骤：
     * <p>
     * 1 导入第三方jar包 json-20180813.jar
     * <p>
     * 2 定义Worker类
     * <p>
     * 3 创建Worker对象，设置属性值
     * <p>
     * 4 创建Json对象，将Worker对象注入到JSON对象中
     */
    private static void function01() {
        Worker worker = new Worker(101, "ss", 300);
        // 1使用原生JSON 需要先new一个 JSONObject 对象再去使用它的成员方法
        // 2在构造方法中去注入 需要转换的对象
        JSONObject json = new JSONObject(worker);
        // 3 转为str
        String jsonData = json.toString();
        System.out.println(jsonData);

        /**
         * 输出
         * {"id":101,"workerName":"ss","workerSalary":300}
         * id 位 str类型   使用 :半角符号  分割 value
         *  JSON与XML对比的优缺点:
         *  优点:JSON解析速度比XML快，内存消耗比XML小。
         *  缺点:但是：JSON数据格式可读性没有XML好
         */
    }
}


